package lessons.no6;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

/**
 * List 集合
 */
public class N6_3 {
    public static void main(String[] args) {
        N6_3 myclass = new N6_3();
       //myclass.testArrayList();
        //myclass.testLinkedList();
       // myclass.testArrayListIterate();
       myclass.TestRunTime();
    }

    public void testArrayList()
    {
        System.out.println("### ArrayList 集合简单使用 ###");

        ArrayList<String> list = new ArrayList<String>(); // 创建ArrayList集合
		list.add("stu1"); // 向集合中添加元素
		list.add("stu2");
		list.add("stu3");
		list.add("stu4");

		System.out.println("集合的长度：" + list.size());  // 获取集合中元素的个数
		System.out.println("第2个元素是：" + list.get(1)); // 取出并打印指定位置的元素

        System.out.println();
    }

    public void test()
    {
        class Test1{};
        LinkedList<Test1> link = new LinkedList<>();
        link.add(new Test1());
    }
    public void testLinkedList()
    {
        System.out.println("### LinkedList 集合简单使用 ###");

        LinkedList<String> link = new LinkedList<String>();  // 创建LinkedList集合

		// 1、添加元素
		link.add("stu1");
		link.add("stu2");

        //在 第 i 的位置添加元素
        link.add(1,"stu3");

         System.out.println(link); // 输出集合中的元素
		link.offer("offer");       // 向集合尾部追加元素
		link.push("push");         // 向集合头部添加元素
		System.out.println(link);  // 输出集合中的元素
		// 2、获取元素
        Object object = link.peek();//获取集合第一个元素
		System.out.println(object); // 输出集合中的元素
		// 3、删除元素
		link.removeFirst();        // 删除集合第一个元素
		link.pollLast();           // 删除集合最后一个元素

        //删除stu3元素
        link.remove("stu3");
		System.out.println(link);
        //删除第0个元素
        link.remove(0);
        System.out.println(link);
        System.out.println();

    }

    public void TestRunTime()
    {
        ArrayList<String> list1 = new ArrayList<>();
        LinkedList<String> list2 = new LinkedList<>();
        int size = 100000;
        long ctime = System.currentTimeMillis();
        for(int i=0;i<size;i++)
        {
            list1.add("test"+i);
        }
        for(int i=0;i<size;i++)
        {
            list1.remove(0);
        }
        System.out.println("ArrayList 添加删除 100000 元素时间: "+(System.currentTimeMillis()-ctime)+" ms");
        
        ctime = System.currentTimeMillis();
        for(int i=0;i<size;i++)
        {
            list2.add("test"+i);
        }
        for(int i=0;i<size;i++)
        {
            list2.remove(0);
        }
        System.out.println("LinkedList 添加删除 100000 元素时间: "+(System.currentTimeMillis()-ctime)+" ms");
    }
    /**
     * 遍历
     */
    public void testArrayListIterate()
    {
        // 创建ArrayList集合
        ArrayList<String> list = new ArrayList<>();   

        // 向该集合中添加字符串
        list.add("data_1");                    
        list.add("data_2");
        list.add("data_3");

        // 获取Iterator对象
        Iterator<String> iterator = list.iterator(); 

        // 判断集合中是否存在下一个元素
        while (iterator.hasNext()) {         
                Object obj = iterator.next();   // 取出ArrayList集合中的元素
                System.out.println(obj);

                //list.remove(obj);
                iterator.remove();
        }

        //第二种遍历方法
        for(int i=0;i<list.size();i++)
        {
            Object obj = list.get(i);
            System.out.println(obj);
        }

        //第三种遍历方法
        for (Object obj : list) {		  // 使用foreach循环遍历ArrayList对象
			System.out.println(obj);	  // 取出并打印ArrayList集合中的元素
		}
    }

    
}
